using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using Unity.VisualScripting;

// 文件数据处理器类
public class FileDataHandler
{
    // 数据目录路径
    private string dataDirPath = "";
    // 数据文件名
    private string dataFileName = "";

    // 是否加密数据
    private bool encryptData = false;
    // 加密解密的密钥
    private string codeWord = "alexdev";

    // 构造函数，初始化数据目录路径和文件名
    public FileDataHandler(string _dataDirPath, string _dataFileName, bool _encryptData)
    {
        dataDirPath = _dataDirPath;
        dataFileName = _dataFileName;
        encryptData = _encryptData;
    }

    // 保存游戏数据方法
    public void Save(GameData _data)
    {
        // 组合完整路径
        string fullPath = Path.Combine(dataDirPath, dataFileName);

        try
        {
            // 创建目录
            Directory.CreateDirectory(Path.GetDirectoryName(fullPath));
            // 将数据转换为JSON格式
            string dataToStore = JsonUtility.ToJson(_data, true);

            // 如果需要加密数据，则进行加密
            if (encryptData)
            {
                dataToStore = EncryptDecrypt(dataToStore);
            }

            // 使用文件流写入数据
            using (FileStream stream = new FileStream(fullPath, FileMode.Create))
            {
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.Write(dataToStore);
                }
            }
        }
        catch (Exception e)
        {
            // 捕获异常并输出错误信息
            Debug.LogError("保存游戏文件失败：" + fullPath + "\n" + e);
        }
    }

    // 加载游戏数据方法
    public GameData Load()
    {
        // 组合完整路径
        string fullPath = Path.Combine(dataDirPath, dataFileName);

        GameData loadData = null;

        // 判断文件是否存在
        if (File.Exists(fullPath))
        {
            try
            {
                string dataToLoad = "";
                // 使用文件流读取数据
                using (FileStream stream = new FileStream(fullPath, FileMode.Open))
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        dataToLoad = reader.ReadToEnd();
                    }
                }

                // 如果需要解密数据，则进行解密
                if (encryptData)
                {
                    dataToLoad = EncryptDecrypt(dataToLoad);
                }
                
                // 将JSON格式的数据转换为GameData对象
                loadData = JsonUtility.FromJson<GameData>(dataToLoad);
            }
            catch (Exception e)
            {
                // 捕获异常并输出错误信息
                Debug.LogError("读取游戏文件失败：" + fullPath + "\n" + e);
            }
        }
        return loadData;
    }

    // 删除游戏数据的方法
    public void Delete()
    {
        // 组合完整路径
        string fullPath = Path.Combine(dataDirPath, dataFileName);
        // 判断文件是否存在
        if (File.Exists(fullPath))
        {
            // 删除文件
            File.Delete(fullPath);
        }
    }

    // 加密解密方法
    private string EncryptDecrypt(string _data)
    {
        string modifiedData = "";
        // 遍历数据中的每一个字符
        for (int i = 0; i < _data.Length; i++)
        {
            // 使用密钥对数据进行加密或解密
            modifiedData += (char)(_data[i] ^ codeWord[i % codeWord.Length]);
        }
        return modifiedData;
    }
    
}